package com.anrongtec.zcpt.openapi.interfaces;

import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.AbsCallback;

import java.util.logging.Level;

import okhttp3.Response;

/**
 * 联网请求工具类
 *
 * @author cxy
 */
public class HttpUtil {

    private static final long CONN_TIMEOUT = 30 * 1000;
    private static final long READ_TIMEOUT = 30 * 1000;
    private static final long WRITE_TIMEOUT = 30 * 1000;

    /**
     * post json
     *
     * @param <T>
     * @param url
     * @param json
     */
    public static <T> void postJson(String url, String json, AbsCallback<T> callback) {

        try {
            OkGo.getInstance()
                    //
                    .debug("okgo", Level.ALL, true)
                    //
                    .post(url).upJson(json)
                    //
                    .connTimeOut(CONN_TIMEOUT).readTimeOut(READ_TIMEOUT).writeTimeOut(WRITE_TIMEOUT)
                    // 可以全局统一设置缓存模式,默认就是Default,可以不传,具体其他模式看 github 介绍
                    // https://github.com/jeasonlzy0216/
                    // .cacheMode(CacheMode.DEFAULT)
                    // 可以全局统一设置缓存时间,默认永不过期,具体使用方法看 github 介绍
                    // .cacheTime(CacheEntity.CACHE_NEVER_EXPIRE)
                    // 可以设置https的证书,以下几种方案根据需要自己设置,不需要不用设置
                    // .setCertificates() //方法一：信任所有证书
                    // .setCertificates(getAssets().open("srca.cer"))
                    // //方法二：也可以自己设置https证书
                    // .setCertificates(getAssets().open("aaaa.bks"), "123456",
                    // getAssets().open("srca.cer"))//方法三：传入bks证书,密码,和cer证书,支持双向加密
                    // .addCommonHeaders(headers) //设置全局公共头
                    // .addCommonParams(params); //设置全局公共参数
                    .execute(callback);

			/*
             * callback一共有以下 7
			 * 个回调,除onResponse必须实现以外,其余均可以按需实现,每个方法参数详细说明,请看下面第6点:
			 * parseNetworkResponse():解析网络返回的数据回调 onBefore():网络请求真正执行前回调
			 * onResponse():网络请求成功的回调 onError():网络请求失败的回调
			 * onAfter():网络请求结束的回调,无论成功失败一定会执行 upProgress():上传进度的回调
			 * downloadProgress():下载进度的回调
			 */

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * post 模拟表单上传
     *
     * @param url 上传信息键值对
     */
    // public static <T> void post(String url, Map<String, String> params,
    // AbsCallback<T> callback) {
    // OkHttpUtils.post(url).params(params).connTimeOut(CONN_TIMEOUT).readTimeOut(READ_TIMEOUT)
    // .writeTimeOut(WRITE_TIMEOUT).execute(callback);
    // }
    public static String postJson(String url, String json, String tag) {

        try {
            Response response = OkGo.getInstance()//
                    .debug("okgo", Level.OFF, true)//
                    .post(url).upJson(json).tag(tag).connTimeOut(CONN_TIMEOUT).readTimeOut(READ_TIMEOUT)
                    .writeTimeOut(WRITE_TIMEOUT).execute();
//            LogUtil.e("请求体:" + json);
            if (response.code() == 200) {
                String string = response.body().string();
                return string;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

    public static void cancelAuth() {
        OkGo.getInstance().cancelTag(ShuJuURL.REQUEST_TAG);
    }

}
